package Minesweeper;

import java.util.*;

/**
 * Die Klasse Spielfeld gibt das Minenfeld aus und aktualisiert es.
 * @author Nino Hutter
 *
 */
public class Spielfeld {
	private int seitenLaenge;
	private ArrayList<Feld> liste;
	
	/**
	 * Der Konstruktor Spielfeld gibt das Spielfeld aus.
	 * @param int seitenLaenge, ArrayList<Feld> liste
	 */
	public Spielfeld(int seitenLaenge, ArrayList<Feld> liste) {
		System.out.println("Felder = x  Minen = o Markierung = !");
		System.out.println();
		this.seitenLaenge = seitenLaenge;
		this.liste = liste;
		System.out.print("    ");
		for (int i = 0; i < seitenLaenge; i++)
			System.out.print(i + 1 + " ");
		System.out.println();
		
		System.out.print("  ");
		for (int i = 0; i < seitenLaenge +1; i++)
			System.out.print("--");
		System.out.println("-");
		
		int y = 0;
		int x = 0;
		int z = seitenLaenge;
		char[] buchstabe = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
		while ( x < seitenLaenge) {
			System.out.print(buchstabe[x]);
			System.out.print(" | ");
			while (y < z) {
				if (liste.get(y).isAufgedeckt() && !liste.get(y).isMine()) {
					if (liste.get(y).getMinenImUmfeld() > 0)
						System.out.print(liste.get(y).getMinenImUmfeld() + " ");
					else
					System.out.print("  ");
				}
				else if (liste.get(y).isAufgedeckt() && liste.get(y).isMine()) {
					System.out.print("o ");
				}
				else if (liste.get(y).isMarkiert()) {
					System.out.print("! ");
				}
				else {
					System.out.print("x ");
				}
				y++;
				
			}
			z += seitenLaenge;
			x++;
			System.out.print("|");
			System.out.println();
		}
		
		System.out.print("  ");
		for (int i = 0; i < seitenLaenge +1; i++)
			System.out.print("--");
		System.out.println("-");
		System.out.println();
	}
	
	/**
	 * Die Methode aktuallisieren gibt das Spielfeld neu aus.
	 */
	public void aktuallisieren() {
		System.out.println("Felder = x  Minen = o Markierung = !");
		System.out.println();
		System.out.print("    ");
		for (int i = 0; i < seitenLaenge; i++)
			System.out.print(i + 1 + " ");
		System.out.println();
		
		System.out.print("  ");
		for (int i = 0; i < seitenLaenge +1; i++)
			System.out.print("--");
		System.out.println("-");
		
		int y = 0;
		int x = 0;
		int z = seitenLaenge;
		char[] buchstabe = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
		while ( x < seitenLaenge) {
			System.out.print(buchstabe[x]);
			System.out.print(" | ");
			while (y < z) {
				if (liste.get(y).isAufgedeckt() && !liste.get(y).isMine()) {
					if (liste.get(y).getMinenImUmfeld() > 0)
						System.out.print(liste.get(y).getMinenImUmfeld() + " ");
					else
					System.out.print("  ");
				}
				else if (liste.get(y).isAufgedeckt() && liste.get(y).isMine()) {
					System.out.print("o ");
				}
				else if (liste.get(y).isMarkiert()) {
					System.out.print("! ");
				}
				else {
					System.out.print("x ");
				}
				y++;
				
			}
			z += seitenLaenge;
			x++;
			System.out.print("|");
			System.out.println();
		}
		
		System.out.print("  ");
		for (int i = 0; i < seitenLaenge +1; i++)
			System.out.print("--");
		System.out.println("-");
		System.out.println();
	}
}